With the widely achieved popularity of Web Services and Service Oriented Architectures (SOA), business process execution and management systems are becoming more and more widely used in organizations. Large business enterprises typically need to integrate their data, applications and processes into a single and unified system. For example, many organizations need to automate business processes by employing a computer to perform certain activities that span multiple systems and applications, such as receiving sales orders, sending notifications to clients, reminding human participants of work that needs to be performed and the like.
Business Process Execution Language (BPEL) and Business Process Management (BPM) systems have become increasingly important solutions to many organizations in this endeavor. For example, BPEL is a standard executable orchestration language that specifies interactions with Web Services. The BPEL processes are written in extensible markup language (XML) and these processes orchestrate synchronous and asynchronous services into end-to-end flows. By implementing software tools like BPEL, enterprises are able to increase productivity, performance, profits, decrease inefficiency due to various factors and otherwise optimize various tasks.
Even with the rising popularity of these business process systems, however, there exists a multitude of shortcomings and other needs in this area of technology. For example, static BPEL processes typically follow the paths defined during the process design time. Some variations to the process may be possible by using business rules and conditional activities, however, these paths need to be known in advance. Any variations to the process generally require redeployment of the process and apply to only new process instances. On many occasions, however, long running processes need to be modified for various reasons and such changed processes would then typically need to be redeployed, causing complications with the in-flight process instances. What is needed is a way to develop extensible processes that can be dynamically changed at runtime without a need of redeployment and it is desirable that these changes be immediately effective.